In a conventional digital logic design, a memory can be shared by many clients. To facilitate the shared memory, a common memory interface is provided for all the clients. A memory arbiter is provided on the memory interface to arbitrate the ‘right of way’ for the requesting clients to access the memory.
Different arbitration schemes can be implemented in an arbiter. One such scheme is a Fixed Priority scheme. The Fixed Priority scheme pre-assigns clients to a fixed priority order with the fixed priority order. When more than one client are requesting at the same time, the highest priority client is always granted the right of access. The Fixed Priority scheme is the easiest to implement. However, the Fixed Priority scheme is unfair.
Another arbitration scheme is a Round-Robin scheme. Round-Robin arbiter makes sure that every requesting client has equal access rights by allocating round-robin slots for every client. However, the round-robin scheme gets very complicated when a slot is allocated to a client that is not requesting. Because memory bandwidth is too precious to go unutilized, the Round-Robin arbiter needs to re-allocate the slot to a requesting client that is waiting next in line. The Round-Robin arbiter needs also to move the granted client to the end of the line.
A real Round-Robin arbiter with absolute fairness is very costly. A conventional Round-Robin arbiter involves a weight counter for every client and associated logic. Overall, it takes a lot of logic circuitry to maintain both memory utilization and client fairness in a Round-Robin arbiter. Since the amount of logic directly translates to cost of manufacturing, it would be desirable to achieve round-robin functionality with less logic.